
import Taro, { Component } from '@tarojs/taro'
import { Provider } from '@tarojs/redux'
import configStore from './store'
import Index from './pages/home/index'
import Tips from './utils/tips'
import { compareVersion } from './utils/wxTools'
import { setGlobalData } from './utils/globalData'
import { weappConfig } from './config'
import './service/request'
import './app.scss'

const store = configStore()

// 环境 ：WEAPP 微信小程序，SWAN 百度小程序，ALIPAY 支付宝小程序，TT 字节跳动小程序，WEB WEB(H5)环境，RN ReactNative 环境
const environment = Taro.getEnv()
// 把store存入globalData中
setGlobalData('store', store)
store.dispatch({ type: 'MOBILE_INFO', payload: { environment: environment } })
// 如果需要在 h5 环境中开启 React Devtools
// 取消以下注释：
// if (process.env.NODE_ENV !== 'production' && process.env.TARO_ENV === 'h5')  {
//   require('nerv-devtools')
// }
console.log(process.env.TARO_ENV, '环境')
class App extends Component {
  config = {
    pages: ['pages/home/index', 'pages/cart/index', 'pages/my/index', 'pages/demo/index'],
    window: {
      backgroundTextStyle: 'light',
      navigationBarBackgroundColor: '#fff',
      navigationBarTitleText: '**',
      navigationBarTextStyle: 'black',
      navigationStyle: 'custom'
    },
    tabBar: {
      color: '#555555',
      selectedColor: '#E50113',
      list: [
        {
          pagePath: 'pages/home/index',
          text: '首页',
          iconPath: 'assets/images/tab/home.png',
          selectedIconPath: 'assets/images/tab/home_act.png'
        },
        {
          pagePath: 'pages/cart/index',
          text: '购物车',
          iconPath: 'assets/images/tab/cart.png',
          selectedIconPath: 'assets/images/tab/cart_act.png'
        },
        {
          pagePath: 'pages/my/index',
          text: '我的',
          iconPath: 'assets/images/tab/my.png',
          selectedIconPath: 'assets/images/tab/my_act.png'
        }
      ]
    },
    networkTimeout: {
      request: 300000,
      connectSocket: 30000,
      uploadFile: 30000,
      downloadFile: 30000
    },
    permission: {
      'scope.userLocation': {
        desc: '**将使用您的地址位置'
      }
    },
    navigateToMiniProgramAppIdList: ['']
  }

  componentWillMount() {
    // App.onLaunch
    switch (environment) {
      case 'WEAPP':
        {
          if (weappConfig.openUpdate) {
            this.updateVersion() // 是否强制更新
          }
          if (weappConfig.watchNet) {
            this.watchNet()
          }
          this.checkVersion()
        }
        break
    }
  }
  /**
   * 强制更新版本
   */
  updateVersion() {
    const updateManager = Taro.getUpdateManager()
    updateManager.onCheckForUpdate(function(res) {
      // 是否有新的版本
      console.log('是否有新的版本:', res.hasUpdate)
    })
    updateManager.onUpdateReady(function() {
      Taro.showModal({
        title: '更新提示',
        content: '新版本已经准备好，现重启更新！',
        showCancel: false,
        success: () => {
          updateManager.applyUpdate()
        }
      })
    })
    updateManager.onUpdateFailed(function() {
      // 新的版本下载失败
      Tips.error('新版本更新失败')
    })
  }
  /**
   * 更新小程序版本库提示
   */
  async checkVersion() {
    const systemInfo = await Taro.getSystemInfo()
    const version = systemInfo.SDKVersion
    if (systemInfo && environment) {
      let isIpx = systemInfo.model.indexOf('iPhone X') >= 0
      const phoneInfo = {
        environment: environment,
        isIpx: isIpx,
        ...systemInfo
      }
      store.dispatch({ type: 'PUT_MOBILE_INFO', payload: phoneInfo })
    }
    if (compareVersion(version, weappConfig.version) < 0) {
      Taro.showModal({
        title: '提示',
        content: '当前微信版本过低，小程序部分功能无法使用，请升级到最新微信版本后重试。'
      })
    }
  }

  watchNet() {
    // 监听网络变化
    Taro.onNetworkStatusChange(function(res) {
      if (!res.isConnected) {
        Tips.confirm('网络提示', '当前网络不可用，请检查网络后，重启小程序！')
      }
      if (res.networkType === '2g' || res.networkType === '3g') {
        Tips.confirm('网络提示', '当前网络慢，请稍后重试')
      }
    })
    Taro.getNetworkType({
      success(res) {
        const networkType = res.networkType
        if (networkType === 'none') {
          Tips.confirm('网络提示', '当前网络不可用，请检查网络后，重启小程序！')
        }
      }
    })
  }

  // 在 App 类中的 render() 函数没有实际作用
  // 请勿修改此函数
  render() {
    return (
      <Provider store={store}>
        <Index />
      </Provider>
    )
  }
}

Taro.render(<App />, document.getElementById('app'))
